オプション解析モジュール docopt を使ってみよう
docopt は docscritings に記述した内容をパースしてオプション解析処理を生成してくれる、逆転の発想でオプション処理を定義する拡張モジュールです。
docoptは拡張モジュールなのでインストールする必要があります。
conda コマンドは 実行環境によっては pip コマンドを使う場合もあります。
code: bash
conda install docopt
# pipの場合
pip install docopt
argparser で使用した例を docopt で書いてみましょう。
code: 0503_docopt.py
from docopt import docopt
__VERSION__='1.0'
__doc__="""Search some files
Arguments:
FILE target file
Options:
-h, --help show this help message and exit
--version show version
-v, --verbose verbose mode
-o OUTFILE, --outfile=OUTFILE output file
--overwrite overwrite if file existing
""".format(prog=__file__)
args = docopt(__doc__,version=__VERSION__)
print(args)
まず、ヘルプメッセージを表示させてみます。
code: bash
% python 0503_docopt.py --help
Search some files
Arguments:
FILE target file
Options:
-h, --help show this help message and exit
--version show version
-v, --verbose verbose mode
-o OUTFILE, --outfile=OUTFILE output file
-p PATTER, --pat=PATTERN search pattern
--overwrite overwrite if file existing
__doc__ で定義したメッセージが出力されています。
docopt() は辞書型オブジェクトを返します。
code: bash
$ python 0503_docopt.py -p apple -o OUT --overwrite sample.csv dummy.txt
{'--help': False,
'--outfile': 'OUT',
'--overwrite': True,
'--pat': 'apple',
'--verbose': False,
'--version': False,
docstrings の記述では、必須の引数やオプション引数には <PAR>のように <> で囲んだり、必須ではない引数やオプション引数には、[PAR] のように []で囲む必要があるなど少しクセがあるため、慣れるまで若干の学習コストが必要かもしれません。
( ): 必須オプションのときに記述します
[ ]: 省略可能なオプションのときに記述します
| : [-h|--help] のようにロングオプションと併用するようなときに指定します
< > : コマンドライン引数のときに記述します
… : コマンドライン引数が複数あるときに、< > の後に記述します
[default: 1] Usage欄に記述するとデフォルト値となります